import numpy as np
import matplotlib.pyplot as plt
try:
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
except:
    plt.rcParams['font.sans-serif'] = ['SimHei', 'SimSun', 'NSimSun', 'FangSong', 'KaiTi']

plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
# 生成样本数据
np.random.seed(0)  # 为了结果的可重复性
data = np.random.normal(loc=50, scale=10, size=10)

# 计算样本均值
sample_mean = np.mean(data)

# 计算样本标准差
sample_std = np.std(data, ddof=1)  # ddof=1 表示无偏估计

# 计算样本均值的标准误差
sample_size = len(data)
standard_error = sample_std / np.sqrt(sample_size)

# 打印结果
print(f"样本均值: {sample_mean:.2f}")
print(f"样本标准差: {sample_std:.2f}")
print(f"样本均值的标准误差: {standard_error:.2f}")

# 绘制数据分布点图
plt.figure(figsize=(12, 6))

# 数据分布点图
plt.subplot(1, 2, 1)
plt.scatter(range(len(data)), data, color='blue', alpha=0.7)
plt.axhline(sample_mean, color='red', linestyle='--', label='样本均值')
plt.title('数据分布')
plt.xlabel('样本索引')
plt.ylabel('值')
plt.legend()

# 标准差和标准误差的可视化
plt.subplot(1, 2, 2)
plt.scatter([1], [sample_mean], color='blue', label='样本均值')
plt.errorbar([1], [sample_mean], yerr=[sample_std], fmt='none', ecolor='green', capsize=10, label='样本标准差')
plt.errorbar([1], [sample_mean], yerr=[standard_error], fmt='none', ecolor='orange', capsize=10, label='样本均值的标准误差')
plt.xticks([1], ['样本均值'])
plt.title('标准差和标准误差')
plt.ylabel('值')
plt.legend()

plt.tight_layout()
plt.show()